/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package GUI.Cadastro;

import Facade.Facade;
import GUI.tabelas.tabelaClientes;
import Objetos.Cliente;
import Objetos.Usuario;
import Objetos.Veiculo;
import java.awt.Color;
import java.awt.Font;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.text.ParseException;
import java.util.Calendar;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
import javax.swing.text.MaskFormatter;

/**
 *
 * @author celio
 */
public final class CadastroVeiculo extends JPanel {

    JLabel marca, placa, cliente, cor, modelo, ano,cpf,cnpj,tipo;
    public static JTextField tMarca, tCliente, tCor, tModelo, tAno;
    public static JFormattedTextField tPlaca,tCpf, tCnpj;
    MaskFormatter mascaraPlaca,mascaraCpf, mascaraCnpj;
    JButton cadastrar, alterar, limpar, sair;
    JTable veiculos;
    ButtonGroup tTipo;
    JRadioButton fisica, juridica;
    JScrollPane scroller;
    Calendar data;
    Facade fa;
    Cliente cli;

    public CadastroVeiculo(final Usuario usu) {

        JLabel tela = new JLabel("... :::   Cadastro de Veículos   ::: ...");
        tela.setBounds(400, 10, 500, 20);
        add(tela);

        data = Calendar.getInstance();

        placa = new JLabel("Placa: ");
        
        tipo = new JLabel("Tipo: ");
        tTipo = new ButtonGroup();
        fisica = new JRadioButton("1-Pessoa Física");
        juridica = new JRadioButton("2-Pessoa Jurídica");
        fisica.setBackground(Color.LIGHT_GRAY);
        juridica.setBackground(Color.LIGHT_GRAY);
        tTipo.add(fisica);
        tTipo.add(juridica);
        
        cpf = new JLabel("CPF: ");
        try {
            mascaraCpf = new MaskFormatter("###.###.###-##");
        } catch (ParseException ex) {
            Logger.getLogger(CadastroCliente.class.getName()).log(Level.SEVERE, null, ex);
        }
        tCpf = new JFormattedTextField(mascaraCpf);

        cnpj = new JLabel("CNPJ: ");
        try {
            mascaraCnpj = new MaskFormatter("##.###.###/####-##");
        } catch (ParseException ex) {
            Logger.getLogger(CadastroCliente.class.getName()).log(Level.SEVERE, null, ex);
        }
        tCnpj = new JFormattedTextField(mascaraCnpj);
        try {
            mascaraPlaca = new MaskFormatter("UUU-####");
        } catch (ParseException ex) {
            Logger.getLogger(CadastroVeiculo.class.getName()).log(Level.SEVERE, null, ex);
        }
        tPlaca = new JFormattedTextField(mascaraPlaca);

        cliente = new JLabel("Cliente: ");
        tCliente = new JTextField(40);
       
        marca = new JLabel("Marca: ");
        tMarca = new JTextField(4);

        modelo = new JLabel("Modelo: ");
        tModelo = new JTextField(5);

        cor = new JLabel("Cor: ");
        tCor = new JTextField(10);

        ano = new JLabel("Ano: ");
        tAno = new JTextField(10);

        cadastrar = new JButton("Cadastrar");
        alterar = new JButton("Alterar");
        limpar = new JButton("Limpar");
        sair = new JButton("Sair");

      
        placa.setBounds(10, 40, 180, 20);
        tPlaca.setBounds(70, 40, 100, 20);
        
        tipo.setBounds(10, 70, 100, 20);
        fisica.setBounds(70, 70, 130, 20);
        juridica.setBounds(200, 70, 130, 20);
        
        cpf.setBounds(10, 100, 60, 20);
        tCpf.setBounds(70, 100, 100, 20);
        cnpj.setBounds(10, 100, 60, 20);
        tCnpj.setBounds(70, 100, 120, 20);
        
        cliente.setBounds(10, 130, 100, 20);
        tCliente.setBounds(70, 130, 200, 20);
        
        
        marca.setBounds(10, 160, 100, 20);
        tMarca.setBounds(70, 160, 80, 20);

        modelo.setBounds(10, 190, 100, 20);
        tModelo.setBounds(70, 190, 180, 20);

        cor.setBounds(10, 220, 100, 20);
        tCor.setBounds(70, 220, 90, 20);

        ano.setBounds(10, 250, 100, 20);
        tAno.setBounds(70, 250, 50, 20);

        cadastrar.setBounds(20, 330, 100, 20);
        alterar.setBounds(350, 450, 100, 20);
        limpar.setBounds(120, 330, 100, 20);
        sair.setBounds(220, 330, 100, 20);

        add(cliente);
        add(tCliente);

        add(placa);
        add(tPlaca);

        add(tipo);
        add(fisica);
        add(juridica);
        
        add(cpf);
        add(tCpf);
        add(cnpj);
        add(tCnpj);
        
        add(marca);
        add(tMarca);

        add(modelo);
        add(tModelo);

        add(cor);
        add(tCor);

        add(ano);
        add(tAno);

        add(cadastrar);
        add(alterar);
        add(limpar);
        add(sair);

        cpf.setVisible(false);
        tCpf.setVisible(false);
        cnpj.setVisible(false);
        tCnpj.setVisible(false);
        tCliente.setEditable(false);
        
        alterar.setEnabled(false);
        atualizaTabela(usu);

        cadastrar.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                fa = new Facade();
                
                if (tPlaca.getText().equalsIgnoreCase("") || tMarca.getText().equalsIgnoreCase("") || tModelo.getText().equalsIgnoreCase("") || tCor.getText().equalsIgnoreCase("") || tAno.getText().equalsIgnoreCase("") || tCliente.getText().equalsIgnoreCase("")) {
                    JOptionPane.showMessageDialog(null, "Preencha todos os campos!!!");
                } else {

                    Veiculo verificarExistente = fa.procurarPelaPlaca_Veiculo(tPlaca.getText(),usu);

                    if (verificarExistente == null) {

                        Veiculo ven = new Veiculo();
                        
                        if(fisica.isSelected()){
                        try{
                        cli = fa.procurarPeloNumCadastro_Cliente(tCpf.getText(), usu);
                        }catch(HeadlessException ex){}
                        }
                        if(juridica.isSelected()){
                        try{
                        cli = fa.procurarPeloNumCadastro_Cliente(tCnpj.getText(), usu);
                        }catch(HeadlessException ex){}
                        }
                        
                        ven.setPlacaVeiculo(tPlaca.getText());
                        ven.setMarcaVeiculo(tMarca.getText());
                        ven.setModeloCarro(tModelo.getText());
                        ven.setCorCarro(tCor.getText());
                        ven.setAnoCarro(tAno.getText());
                        ven.setIdCliente(cli.getCod_cliente());
                        fa.adicionar_Veiculo(ven, usu);
                        
                        tCliente.setText("");
                        tPlaca.setText("");
                        tMarca.setText("");
                        tModelo.setText("");
                        tCor.setText("");
                        tAno.setText("");
                        tCpf.setText("");
                        tCnpj.setText("");
                        atualizaTabela(usu);
                        

                    } else {

                        JOptionPane.showMessageDialog(null, "Veículo já cadastrado!!!");
                    }

                   
                }

            }
        });
        tCpf.addKeyListener(new KeyListener() {

            
            @Override
            public void keyTyped(KeyEvent e) {
               // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
            }

            @Override
            public void keyPressed(KeyEvent e) {
            
                if(e.getKeyCode()==118){
                    
                    tabelaClientes tc = new tabelaClientes(usu);
                    
                }
                
            }

            @Override
             public void keyReleased(KeyEvent e) {
               // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
            }
        });
        tCpf.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                fa = new Facade();
                cli = fa.procurarPeloNumCadastro_Cliente(tCpf.getText(),usu);
                if(cli==null){
                    JOptionPane.showMessageDialog(null, "Cliente não cadastrado!!!");
                }else{
                tCliente.setText(cli.getNome());
                }
            }
        });

        tCnpj.addKeyListener(new KeyListener() {

            
            @Override
            public void keyTyped(KeyEvent e) {
               // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
            }

            @Override
            public void keyPressed(KeyEvent e) {
            
                if(e.getKeyCode()==118){
                    
                    tabelaClientes tc = new tabelaClientes(usu);
                    
                }
                
            }

            @Override
             public void keyReleased(KeyEvent e) {
               // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
            }
        });
        
        tCnpj.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                fa = new Facade();
                cli = fa.procurarPeloNumCadastro_Cliente(tCnpj.getText(),usu);
                if(cli==null){
                    JOptionPane.showMessageDialog(null, "Cliente não cadastrado!!!");
                }else{
                tCliente.setText(cli.getNome());
                }

            }
        });
        
         fisica.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                cpf.setVisible(true);
                tCpf.setVisible(true);
                cnpj.setVisible(false);
                tCnpj.setVisible(false);
                
                tCpf.setText("");
                tCnpj.setText("");
                tCliente.setText("");

            }
        });

        juridica.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                cpf.setVisible(false);
                tCpf.setVisible(false);
                cnpj.setVisible(true);
                tCnpj.setVisible(true);
                
                tCpf.setText("");
                tCnpj.setText("");
                tCliente.setText("");

            }
        });
        
        alterar.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                atualizaTabela(usu);
            }
        });

        limpar.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                tCliente.setText("");
                tPlaca.setText("");
                tMarca.setText("");
                tModelo.setText("");
                tCor.setText("");
                tAno.setText("");
                tCpf.setText("");
                tCnpj.setText("");
                atualizaTabela(usu);

            }
        });

        sair.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                setVisible(false);
            }
        });

        setLayout(null);
        setBackground(Color.LIGHT_GRAY);
        setBorder(BorderFactory.createBevelBorder(1, Color.DARK_GRAY, Color.DARK_GRAY));
        setSize(800, 600);
        setVisible(true);
        revalidate();
        repaint();
    }

    public void atualizaTabela(Usuario usu) {

        try {
            remove(scroller);

        } catch (NullPointerException e) {
        }
        fa = new Facade();
        veiculos = fa.consultaTodos_Veiculo(usu);
        veiculos.setFont(new Font("Times New Roman", Font.BOLD, 14));
        scroller = new JScrollPane(veiculos, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        scroller.setBounds(350, 50, 720, 400);
        add(scroller);

    }

}
